#include "UdpServer.hpp"
#include <memory>

void Usage(std::string proc)
{
    std::cout << "\n\rUsage: " << proc << " port" << std::endl;
}

std::string fun(std::string str)
{
    std::string temp = str + "fun";
    std::cout << "Server Say@ " << temp << std::endl;
    return temp;
}

std::string Excutecommand(const std::string cmd)
{
    // 第一个参数：我们需要执行的指令，第二个参数：我们需要对执行之后的信息进行读取操作
    //popen会帮你fork()一个子进程，帮你给父子进程建立一个管道，然后将子进程执行完的指令信息放入管道中
    FILE *fp = popen(cmd.c_str(), "r"); 
    if (fp == nullptr)
    {
        perror("main::popen");
        exit(0);
    }

    // while (true)
    // {
    //     char buffer[4096] = {0};
    //     if (fgets(buffer, sizeof(buffer), fp) == nullptr)
    //         break;
    //     printf("%s", buffer);
    // }

    std::string result;
    char buffer[4096];

    while(true)
    {
        char *ok = fgets(buffer, sizeof(buffer), fp);
        if(ok == nullptr) break;
        result += buffer;
    }

    pclose(fp);
    return result;
}

int main(int argc, char *argv[])
{
    // ./UdpServer port
    if (argc != 2)
    {
        Usage(argv[1]);
        exit(0);
    }

    std::unique_ptr<UdpServer> Udp(new UdpServer);

    Udp->init();
    Udp->Run(fun);

    return 0;
}